transcode: fix destructive assignment after drain
authorAlaric Senat <alaric@videolabs.io>
Mon, 24 Jun 2024 16:11:23 +0000 (18:11 +0200)
committerSebastian Ramacher <sramacher@debian.org>
Tue, 14 Jan 2025 22:09:47 +0000 (23:09 +0100)
commitacc1d516946765206cfebe083a1cfe9aaea44c35
tree61b758596fcec26f36cf45fa65607e45a74707ab
parente73e8e32629b8b8061ea729d79e6476c5264123b
transcode: fix destructive assignment after drain

The drain checks are done after the first encoder output fetch. At this
point, `out` is already filled with some frames gotten from the encoder
some lines above:

```
// ...
    if( p_sys->i_threads >= 1 )
    {
        /* Pick up any return data the encoder thread wants to output. */
        vlc_mutex_lock( &p_sys->lock_out );
        *out = p_sys->p_buffers;
        p_sys->p_buffers = NULL;
        vlc_mutex_unlock( &p_sys->lock_out );
    }

// ...
```

This assignment currently leaks all previously gathered frames to
replace them by the drained output. This patch appends the drained
frames to the existing output instead.

Gbp-Pq: Name 0008-transcode-fix-destructive-assignment-after-drain.patch
modules/stream_out/transcode/video.c